package com.bjpowernode.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bjpowernode.entity.UmsAdmin;
import com.bjpowernode.feign.FileService;
import com.bjpowernode.mapper.UmsAdminMapper;
import com.bjpowernode.service.UmsAdminService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 管理员表 服务实现类
 * </p>
 *
 * @author zs
 * @since 2024-05-21
 */
@Service
public class UmsAdminServiceImpl extends ServiceImpl<UmsAdminMapper, UmsAdmin> implements UmsAdminService {

    // 注入mapper使得当前类可以使用UmsAdminMapper接口中的方法进行数据库操作。（MyBatisPlus实现）
    @Resource
    UmsAdminMapper umsAdminMapper;
    @Resource
    FileService fileService;

    //定义属于子类的方法，重写父类的方法来实现子类需要的功能
    @Override
    public IPage<UmsAdmin> getUmsAdminList(Integer pageNo, Integer pageSize,String name) {
        //QueryWrapper<UmsAdmin>类型的实例，其中UmsAdmin是被包装的对象类型。QueryWrapper是MyBatis-Plus提供的一个查询条件构造器，可以用来方便地构建SQL查询语句的条件部分
        QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>();

        //根据姓名进行模糊查询（name.trim()为去除空格）
        wrapper.like("name",name.trim());

        //排序（根据sort来排序）[目前为降序排序，目的是为了前端查询完页面后能够体现页面的书信]
        wrapper.orderByDesc("sort");

        //分页（这个函数是Java中的一个方法，它通过传入的页码和每页大小参数，以及一个包装器对象，返回一个分页后的结果）
/*        wrapper：是一个包装器对象，用于设置查询条件、排序等信息。
        该方法内部会根据传入的页码和每页大小计算出查询的起始位置，并使用包装器对象中的条件和排序信息进行查询。最后返回查询结果的分页对象。*/
        return this.page(new Page<>(pageNo, pageSize), wrapper);
    }


    //实现具体保存新增管理员方法，将获前端页面获取到的数据保存到数据库中
    @Override
    public Boolean save(String name, String phone, String email, Integer gender, String password, MultipartFile file) {
        //在上传文件时，将上传的文件保存到MinIO服务器中，并返回保存后的文件路径（在minio中保存图片）
        String icon = fileService.imageUpload(file);//远程Feign远程调用文件上传模块的功能方法
        return this.save(new UmsAdmin(name,phone,email,gender,password,icon));
    }

    @Override
    public Boolean update(String id, String name, String phone, String email, Integer gender, MultipartFile file) {
        UmsAdmin umsAdmin = new UmsAdmin(id, name, phone, email, gender);
        //判断头像文件是否为空（修改时头像又有可能不尽兴修改）
        if (file != null) {
            //若头像文件进行了修改则进行上传操作
            umsAdmin.setIcon(fileService.imageUpload(file));
        }
        return this.updateById(umsAdmin);
    }

    @Override
    public Boolean delete(String id, Boolean active) {
        return this.updateById(new UmsAdmin(id,active));
    }
}
